#include <iostream>
#include <string>
using namespace std;

//类模版和函数模版的区别
template<class NameType, class AgeType = int>
                        //默认为整型，函数模版中不能默认
class Person
{
public:
    NameType name;
    AgeType age;

    Person(NameType name, AgeType age)
    {
        this->name = name;
        this->age = age;
    }
    void show()
    {
        cout << "name = " << name << endl;
        cout << "age = " << age << endl;
    }
};

//1、类模版没有自动类型推导的使用方式
void test1()
{
    //error: Person p("孙悟空",1000);      无法用自动类型推导
    
    Person<string, int> p("孙悟空", 1000);//只能用显示指定类型
    p.show();
}

//2、类模版在模版参数列表中可以有默认参数
void test2()
{
    Person<string> p("猪八戒", 99);
    p.show();
}
int main()
{
    test1();
    test2();
    return 0;
}